package com.lengmou.service.impl;

import com.lengmou.dao.GoodsTypeDao;
import com.lengmou.entity.GoodsType;
import com.lengmou.service.GoodsTypeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service("GoodsTypeService")
public class GoodsTypesServiceImpl implements GoodsTypeService {
    @Resource
    private GoodsTypeDao goodsTypeDao;
    @Override
    public List<GoodsType> getAll() {

        return goodsTypeDao.querysAll();
    }

    @Override
    public List<GoodsType> getTypeSons(int typeid) {
        return goodsTypeDao.querysBySon(typeid);
    }

    @Override
    public GoodsType getTypeFather(int typeid) {
        GoodsType typeBy = getTypeBy(typeid);
        if(typeBy!=null){
            return getTypeBy(typeBy.getFromid());
        }
        return null;
    }

    @Override
    public List<GoodsType> getTypeborther(int typeid) {
        GoodsType typeBy = getTypeBy(typeid);
        if(typeBy!=null){
            List<GoodsType> typeSons = getTypeSons(typeBy.getFromid());
            if(typeSons!=null){
                for (int i = 0; i < typeSons.size(); i++) {
                    if(typeSons.get(i).getId()==typeid){
//                        找到并删除自己（因为我要找的是我兄弟，不包含我自己）
                        typeSons.remove(i);
                    }
                }
            }
            return typeSons;
        }
        return null;
    }

    @Override
    public GoodsType getTypeBy(int id) {
        return goodsTypeDao.queryById(id);
    }

    @Override
    public GoodsType getTypeByName(String name) {
        return goodsTypeDao.queryByname(name);
    }

    @Override
    public int addType(GoodsType goodsType) {
        GoodsType goodsType1 = goodsTypeDao.queryByname(goodsType.getName());
        if(goodsType1==null){
            return goodsTypeDao.addGoodsType(goodsType);
        }
//        表示已经有相同的名称了
        return -1;
    }

    @Override
    public int setTypeName(GoodsType goodsType) {
        GoodsType goodsType1 = goodsTypeDao.queryByname(goodsType.getName());
        GoodsType typeBy = getTypeBy(goodsType.getId());
        if(goodsType1==null){
            typeBy.setName(goodsType.getName());
            return goodsTypeDao.updataType(typeBy);
        }
//        表示已经有相同的名称了
        return -1;
    }

    @Override
    public int setTypeFromid(GoodsType goodsType) {

        GoodsType goodsType1 = goodsTypeDao.queryById(goodsType.getId());
        if(goodsType1!=null){
            GoodsType typeBy = getTypeBy(goodsType.getFromid());
            if(goodsType.getFromid()==0||typeBy!=null){
                goodsType1.setFromid(goodsType.getFromid());
                return goodsTypeDao.updataType(goodsType1);
            }
//            不存在父类id
            return -3;
        }
//        表示传过来的id对象不存在
        return -1;
    }

    @Override
    public int deleteType(int id) {
        GoodsType goodsType1 = goodsTypeDao.queryById(id);
        if(goodsType1!=null){
            return goodsTypeDao.deleteType(id);
        }
//      表示该对象本来就不存在
        return -1;
    }

    @Override
    public int updata(GoodsType goodsType) {
        if(goodsType!=null){
            GoodsType typeBy = getTypeBy(goodsType.getId());
            if(typeBy!=null){
                GoodsType typeByName = getTypeByName(goodsType.getName());
                if(typeByName.getId()==goodsType.getId()){
                    if(goodsType.getFromid()!=0){
                        GoodsType typeBy1 = getTypeBy(goodsType.getFromid());
                        if(typeBy1==null){
//                            父类不存在
                            return -4;
                        }
                    }
                    return goodsTypeDao.updataType(goodsType);

                }
//                名字已经被使用了
                return -3;

            }
//            id找不到
            return -2;

        }
        return -1;
    }



}
